home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / ibus / property.py < prev    next >
Text File  |  2009-11-05  |  7KB  |  233 lines

  1. # vim:set et sts=4 sw=4:
  2. #
  3. # ibus - The Input Bus
  4. #
  5. # Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
  6. #
  7. # This library is free software; you can redistribute it and/or
  8. # modify it under the terms of the GNU Lesser General Public
  9. # License as published by the Free Software Foundation; either
  10. # version 2 of the License, or (at your option) any later version.
  11. #
  12. # This library is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. # GNU Lesser General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU Lesser General Public
  18. # License along with this program; if not, write to the
  19. # Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  20. # Boston, MA  02111-1307  USA
  21.  
  22. __all__ = (
  23.         "PROP_TYPE_NORMAL",
  24.         "PROP_TYPE_TOGGLE",
  25.         "PROP_TYPE_RADIO",
  26.         "PROP_TYPE_SEPARATOR",
  27.         "PROP_TYPE_MENU",
  28.         "PROP_STATE_UNCHECKED",
  29.         "PROP_STATE_CHECKED",
  30.         "PROP_STATE_INCONSISTENT",
  31.         "Property",
  32.         "PropList",
  33.     )
  34.  
  35. import dbus
  36. from text import Text
  37. from serializable import *
  38.  
  39. PROP_TYPE_NORMAL = 0
  40. PROP_TYPE_TOGGLE = 1
  41. PROP_TYPE_RADIO = 2
  42. PROP_TYPE_MENU = 3
  43. PROP_TYPE_SEPARATOR = 4
  44.  
  45. PROP_STATE_UNCHECKED = 0
  46. PROP_STATE_CHECKED = 1
  47. PROP_STATE_INCONSISTENT = 2
  48.  
  49. def _to_unicode(text):
  50.     if isinstance(text, unicode):
  51.         return text
  52.     if isinstance(text, str):
  53.         return unicode(text, "utf8")
  54.     raise TypeError("text must be instance of unicode or str")
  55. def _to_text(text):
  56.     if isinstance(text, Text):
  57.         return text
  58.     text = _to_unicode(text)
  59.     return Text(text)
  60.  
  61. class Property(Serializable):
  62.     __gtype_name__ = "PYIBusProperty"
  63.     __NAME__ = "IBusProperty"
  64.     def __init__(self, key="", type=PROP_TYPE_NORMAL, label=u"", icon=u"", tooltip=u"",
  65.                  sensitive=True, visible=True, state=PROP_STATE_UNCHECKED):
  66.         super(Property, self).__init__()
  67.         self.__key = _to_unicode(key)
  68.         self.__type = type
  69.         self.label = label
  70.         self.icon = icon
  71.         self.tooltip = tooltip
  72.         self.sensitive = sensitive
  73.         self.visible = visible
  74.         self.state = state
  75.         self.sub_props = PropList()
  76.  
  77.     def set_sub_props(self, props):
  78.         self.__sub_props = props
  79.  
  80.     def get_sub_props(self):
  81.         return self.__sub_props
  82.  
  83.     def get_key(self):
  84.         return self.__key
  85.  
  86.     def get_type(self):
  87.         return self.__type
  88.  
  89.     def set_label(self, label):
  90.         self.__label = _to_text(label)
  91.  
  92.     def get_label(self):
  93.         return self.__label
  94.  
  95.     def set_icon(self, icon):
  96.         self.__icon = _to_unicode(icon)
  97.  
  98.     def get_icon(self):
  99.         return self.__icon
  100.  
  101.     def set_tooltip(self, tooltip):
  102.         self.__tooltip = _to_text(tooltip)
  103.  
  104.     def get_tooltip(self):
  105.         return self.__tooltip
  106.  
  107.     def set_state(self, state):
  108.         self.__state = state
  109.  
  110.     def get_state(self):
  111.         return self.__state
  112.  
  113.     def set_sensitive(self, sensitive):
  114.         self.__sensitive = sensitive
  115.  
  116.     def get_sensitive(self):
  117.         return self.__sensitive
  118.  
  119.     def set_visible(self, visible):
  120.         self.__visible = visible
  121.  
  122.     def get_visible(self):
  123.         return self.__visible
  124.  
  125.     key         = property(get_key)
  126.     type        = property(get_type)
  127.     label       = property(get_label, set_label)
  128.     icon        = property(get_icon, set_icon)
  129.     tooltip     = property(get_tooltip, set_tooltip)
  130.     state       = property(get_state, set_state)
  131.     sensitive   = property(get_sensitive, set_sensitive)
  132.     visible     = property(get_visible, set_visible)
  133.     sub_props   = property(get_sub_props, set_sub_props)
  134.  
  135.     def is_same(self, prop, test_all = True):
  136.         if self.__name != prop.__name or self.__type != prop.__type:
  137.             return False
  138.         if not test_all:
  139.             return True
  140.         if self.__label != prop.__label or \
  141.             self.__icon != prop.__icon or \
  142.             self.__tooltip != prop.__tooltip or \
  143.             self.__sensitive != prop.__sensitive or \
  144.             self.__visible != prop.__visible or \
  145.             self.__state != prop.__state:
  146.             return False
  147.         return self.__sub_props.is_same(prop.__sub_props, test_all)
  148.  
  149.  
  150.     def serialize(self, struct):
  151.         super(Property, self).serialize(struct)
  152.         struct.append(dbus.String(self.__key))
  153.         struct.append(dbus.UInt32(self.__type))
  154.         struct.append(serialize_object(self.__label))
  155.         struct.append(dbus.String(self.__icon))
  156.         struct.append(serialize_object(self.__tooltip))
  157.         struct.append(dbus.Boolean(self.__sensitive))
  158.         struct.append(dbus.Boolean(self.__visible))
  159.         struct.append(dbus.UInt32(self.__state))
  160.         sub_props = serialize_object(self.__sub_props)
  161.         struct.append(sub_props)
  162.  
  163.     def deserialize(self, struct):
  164.         super(Property, self).deserialize(struct)
  165.         self.__key = struct.pop(0)
  166.         self.__type = struct.pop(0)
  167.         self.__label = deserialize_object(struct.pop(0))
  168.         self.__icon = struct.pop(0)
  169.         self.__tooltip = deserialize_object(struct.pop(0))
  170.         self.__sensitive = deserialize_object(struct.pop(0))
  171.         self.__visible = struct.pop(0)
  172.         self.__state = struct.pop(0)
  173.         props = struct.pop(0)
  174.  
  175.         self.__sub_props = deserialize_object(props)
  176.  
  177. class PropList(Serializable):
  178.     __gtype_name__ = "PYIBusPropList"
  179.     __NAME__ = "IBusPropList"
  180.     def __init__(self):
  181.         super(PropList, self).__init__()
  182.         self.__props = []
  183.  
  184.     def append(self, prop):
  185.         self.__props.append(prop)
  186.  
  187.     def prepand(self, prop):
  188.         self.__props.insert(0, prop)
  189.  
  190.     def insert(self, index, prop):
  191.         self.__props.insert(index, prop)
  192.  
  193.     def get_properties(self):
  194.         return self.__props[:]
  195.  
  196.     def is_same(self, props, test_all = True):
  197.         if len(props.get_properties()) != len(self.get_properties()):
  198.             return False
  199.  
  200.         for a, b in zip(self.get_properties(), props.get_properties()):
  201.             if not a.is_same(b, test_all):
  202.                 return False
  203.         return False
  204.  
  205.     def serialize(self, struct):
  206.         super(PropList, self).serialize(struct)
  207.         props = map(lambda p: serialize_object(p), self.__props)
  208.         struct.append (dbus.Array(props, signature = "v"))
  209.  
  210.     def deserialize(self, struct):
  211.         super(PropList, self).deserialize(struct)
  212.         props = map(lambda v: deserialize_object(v), struct.pop(0))
  213.         self.__props = props
  214.  
  215.     def __iter__(self):
  216.         return self.__props.__iter__()
  217.  
  218.     def __getitem__(self, i):
  219.         return self.__props.__getitem__(i)
  220.  
  221. def test():
  222.     props = PropList()
  223.     props.append(Property(u"a"))
  224.     props.append(Property(u"b"))
  225.     props.append(Property(u"c"))
  226.     props.append(Property(u"d"))
  227.     value = serialize_object(props)
  228.     props = deserialize_object(value)
  229.     print props
  230.  
  231. if __name__ == "__main__":
  232.     test()
  233.